home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 February: Tool Chest / Dev.CD Feb 94.toast / Tool Chest / Development Platforms / AppsToGo / AppsToGo.src / DTS.Lib / Extra.Headers / TextServices.h < prev   
Encoding:
C/C++ Source or Header  |  1993-06-18  |  16.1 KB  |  479 lines  |  [TEXT/KAHL]

  1. /*
  2.     File:        TextServices.h
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.  
  10. */
  11.  
  12. #ifndef __TEXTSERVICES__
  13. #define __TEXTSERVICES__
  14.  
  15. #ifndef __TYPES__
  16. #include    <Types.h>
  17. #endif
  18.  
  19. #ifndef __EVENTS__
  20. #include    <Events.h>
  21. #endif
  22.  
  23. #ifndef __MENUS__
  24. #include    <Menus.h>
  25. #endif
  26.  
  27. #ifndef __APPLEEVENTS__
  28. #include    <AppleEvents.h>
  29. #endif
  30.  
  31. #ifndef __ERRORS__
  32. #include    <Errors.h>
  33. #endif
  34.  
  35.  
  36. #ifndef __COMPONENTS__
  37. #include    <Components.h>
  38. #endif
  39.  
  40.  
  41.  
  42. #define        kTSMVersion                    1                /* Version of the Text Services Manager */
  43. #define        kTextService                'tsvc'        /* component type for the component description */
  44. #define        kInputMethodService        'inpm'        /* component subtype for the component description */
  45.  
  46. #define        bTakeActiveEvent            15                /* bit set if the component takes active event */
  47. #define        bScriptMask                    0x00007F00    /* bit 8 - 14 */
  48. #define        bLanguageMask                0x000000FF    /* bit 0 - 7  */
  49. #define        bScriptLanguageMask        bScriptMask+bLanguageMask    /* bit 0 - 14  */
  50. /*    •• ************************************** ••  */
  51.  
  52.  
  53. /* Hilite styles ... */
  54. typedef enum {
  55.     kCursorPosition                =    1,                    /* specify cursor position */
  56.     kRawText                            =    2,                    /* specify range of raw text */
  57.     kSelectedRawText                =    3,                    /* specify range of selected raw text */
  58.     kConvertedText                    =    4,                    /* specify range of converted text */
  59.     kSelectedConvertedText        =    5                    /* specify range of selected converted text */
  60. } HiliteStyleType;
  61.  
  62. /*    •• ************************************** ••  */
  63.  
  64.  
  65. /* Apple Event constants ... */
  66.  
  67. /* Event class ... */
  68.  
  69. #define        kTextServiceClass            kTextService
  70.  
  71. /* event ID ... */
  72.  
  73. #define        kUpdateActiveInputArea    'updt'        /* update the active Inline area */    
  74. #define        kPos2Offset                    'p2st'        /* converting global coordinates to char position */
  75. #define        kOffset2Pos                    'st2p'        /* converting char position to global coordinates */
  76. #define        kShowHideInputWindow        'shiw'        /* show or hide the input window */
  77.  
  78. /* Event keywords ... */
  79.  
  80. #define        keyAETSMDocumentRefcon    'refc'        /* TSM document refcon, typeLongInteger        <#45> */
  81.  
  82.  
  83. #define        keyAEServerInstance        'srvi'        /* component instance */
  84. #define        keyAETheData                'kdat'        /* typeText */
  85. #define        keyAEScriptTag                'sclg'        /* script tag */
  86. #define        keyAEFixLength                'fixl'        /* fix len ?? */
  87. #define        keyAEHiliteRange            'hrng'        /* hilite range array */
  88. #define        keyAEUpdateRange            'udng'        /* update range array */
  89. #define        keyAEClauseOffsets        'clau'        /* Clause Offsets array */
  90.  
  91. #define        keyAECurrentPoint            'cpos'        /* current point */
  92. #define        keyAEDragging                'bool'        /* dragging falg */
  93. #define        keyAEOffset                    'ofst'        /* offset */
  94. #define        keyAERegionClass            'rgnc'        /* region class */
  95. #define        keyAEPoint                    'gpos'        /* current point */
  96. #define        keyAEBufferSize            'buff'        /* buffer size to get the text */
  97. #define        keyAERequestedType        'rtyp'        /* requested text type */
  98. #define        keyAEMoveView                'mvvw'        /* move view flag */
  99. #define        keyAELength                    'leng'        /* length */
  100. #define        keyAENextBody                'nxbd'        /* next or previous body */
  101.  
  102.  
  103. /* optional keywords for Offset2Pos                    -- 28Mar92 <#38> */
  104. #define        keyAETextFont                'ktxf'
  105. #define        keyAETextPointSize        'ktps'
  106. #define        keyAETextLineHeight        'ktlh'
  107. #define        keyAETextLineAscent        'ktas'
  108. #define        keyAEAngle                    'kang'
  109.  
  110.  
  111. /* optional keywords for Pos2Offset                    -- 20May92 <#44> */
  112. #define        keyAELeftSide                'klef'        /* type Boolean */
  113.  
  114. /* optional keywords for kShowHideInputWindow    -- <#48> */
  115. #define        keyAEShowHideInputWindow 'shiw'        /* type Boolean */
  116.  
  117. /* for PinRange  */
  118. #define        keyAEPinRange                'pnrg'        /* <#49> */
  119.  
  120. /* Desc type ... */
  121.  
  122. #define        typeComponentInstance    'cmpi'        /* server instance */
  123. #define        typeTextRangeArray        'tray'        /* text range array */
  124. #define        typeOffsetArray            'ofay'        /* offset array */
  125. #define        typeIntlWritingCode        'intl'        /* script code */
  126. #define        typeQDPoint                    'QDpt'        /* QuickDraw Point */
  127. #define        typeAEText                    'tTXT'        /* Apple Event text */
  128. #define        typeText                        'TEXT'        /* Plain text */
  129.  
  130. #define        typeTextRange                'txrn'        /* <#49> */
  131.  
  132.  
  133.  
  134. /* error codes */
  135.  
  136. #define    tsmComponentNoErr                0                // component result = no error
  137.  
  138.  
  139. #define    tsmUnsupScriptLanguageErr    -2500            //
  140. #define    tsmInputMethodNotFoundErr    -2501            //
  141. #define    tsmNotAnAppErr                    -2502            // not an application error
  142. #define    tsmAlreadyRegisteredErr        -2503            // want to register again error
  143. #define    tsmNeverRegisteredErr        -2504            // app never registered error (not TSM aware)
  144. #define    tsmInvalidDocIDErr            -2505            // invalid TSM documentation id
  145. #define    tsmTSMDocBusyErr                -2506            // document is still active
  146. #define    tsmDocNotActiveErr            -2507            // document is NOT active
  147. #define    tsmNoOpenTSErr                    -2508            // no open text service
  148. #define    tsmCantOpenComponentErr        -2509            // can't open the component
  149. #define    tsmTextServiceNotFoundErr    -2510            // no text service found
  150. #define    tsmDocumentOpenErr            -2511            // there are open documents
  151. #define    tsmUseInputWindowErr            -2512            // not TSM aware because we are using input window
  152. #define    tsmTSHasNoMenuErr                -2513            // the text service has no menu
  153. #define    tsmTSNotOpenErr                -2514            // text service is not open
  154. #define    tsmComponentAlreadyOpenErr    -2515            // text service already opened for the document
  155.  
  156. #define    tsmInputMethodIsOldErr        -2516            // returned by GetDefaultInputMethod
  157. #define    tsmScriptHasNoIMErr            -2517            // script has no imput method or is using old IM.
  158. #define    tsmUnsupportedTypeErr        -2518            // unSupported interface type error
  159. #define    tsmUnknownErr                    -2519            // any other errors
  160.  
  161.  
  162.  
  163.  
  164. /* Desc type constants */
  165.  
  166. typedef enum {
  167.     kTSMOutsideOfBody                    = 1,
  168.     kTSMInsideOfBody                    = 2,
  169.     kTSMInsideOfActiveInputArea    = 3
  170. } AERegionClassType;
  171.  
  172. typedef enum {
  173.     kNextBody                        = 1,
  174.     kPreviousBody                    = 2
  175. } AENextBodyType;
  176.  
  177.  
  178. /* Apple Event error definitions */
  179.  
  180. typedef enum {
  181.     errOffsetInvalid                = -1800,
  182.     errOffsetIsOutsideOfView    = -1801,
  183.     errTopOfDocument                = -1810,
  184.     errTopOfBody                    = -1811,
  185.     errEndOfDocument                = -1812,
  186.     errEndOfBody                    = -1813
  187. } AppleEventErrorType;
  188.  
  189. /*    •• ************************************** ••  */
  190.  
  191.  
  192. struct TextRange {                    /* typeTextRange         'txrn' */
  193.     long    fStart;
  194.     long    fEnd;
  195.     short    fHiliteStyle;
  196. };
  197. typedef struct TextRange TextRange;
  198. typedef TextRange *TextRangePtr;
  199. typedef TextRangePtr *TextRangeHandle;
  200.  
  201.  
  202. struct TextRangeArray {                /* typeTextRangeArray    'txra' */
  203.     short        fNumOfRanges;            /* specify the size of the fRange array */
  204.     TextRange    fRange[1];            /* when fNumOfRanges > 1, the size of this array has to be calculated */
  205. };
  206. typedef struct TextRangeArray TextRangeArray;
  207. typedef TextRangeArray *TextRangeArrayPtr;
  208. typedef TextRangeArrayPtr *TextRangeArrayHandle;
  209.  
  210.  
  211. struct OffsetArray {                    /* typeOffsetArray        'offa' */
  212.     short    fNumOfOffsets;                /* specify the size of the fOffset array */
  213.     long    fOffset[1];                    /* when fNumOfOffsets > 1, the size of this array has to be calculated */
  214. };
  215. typedef struct OffsetArray OffsetArray;
  216. typedef OffsetArray *OffsetArrayPtr;
  217. typedef OffsetArrayPtr *OffsetArrayHandle;
  218.  
  219. /*    •• ************************************** ••  */
  220.  
  221.  
  222. /* extract Script/Language code from Component flag ... */
  223. #define        mGetScriptCode(cdRec)        ((ScriptCode)    ((cdRec.componentFlags & bScriptMask) >> 8))
  224. #define        mGetLanguageCode(cdRec)        ((LangCode)        cdRec.componentFlags & bLanguageMask)
  225.  
  226.  
  227. typedef        void    *TSMDocumentID;
  228. /*    •• ************************************** ••  */
  229.  
  230.  
  231. /*
  232.  *    Text Service Info List
  233.  */
  234. struct TextServiceInfo {
  235.  Component            fComponent;
  236.  Str255                fItemName;
  237. };
  238.  
  239. typedef struct TextServiceInfo TextServiceInfo;
  240. typedef TextServiceInfo *TextServiceInfoPtr;
  241.  
  242.  
  243. struct TextServiceList {
  244.  short                    fTextServiceCount;                /* number of entries in the 'fServices' array */
  245.  TextServiceInfo        fServices[1];                        /* Note: array of 'TextServiceInfo' records follows */
  246. };
  247.  
  248. typedef struct TextServiceList TextServiceList;
  249. typedef TextServiceList *TextServiceListPtr; 
  250. typedef TextServiceListPtr *TextServiceListHandle; 
  251.  
  252.  
  253. struct ScriptLanguageRecord {
  254.  ScriptCode        fScript;
  255.  LangCode        fLanguage;
  256. };
  257.  
  258. typedef struct ScriptLanguageRecord ScriptLanguageRecord;
  259.  
  260.  
  261. struct ScriptLanguageSupport {
  262.  short                        fScriptLanguageCount;        /* number of entries in the 'fScriptLanguageArray' array */
  263.  ScriptLanguageRecord    fScriptLanguageArray[1];    /* Note: array of 'ScriptLanguageRecord' records follows */
  264. };
  265.  
  266. typedef struct ScriptLanguageSupport ScriptLanguageSupport;
  267. typedef ScriptLanguageSupport *ScriptLanguageSupportPtr; 
  268. typedef ScriptLanguageSupportPtr *ScriptLanguageSupportHandle; 
  269.  
  270. /*    •• ************************************** ••  */
  271.  
  272.  
  273.  
  274.  
  275. #define    TSMTrapNum        0xAA54
  276.  
  277. /* ••    Text Services Manager function selectors ... */
  278.  
  279. /* ••    High level routines ... */
  280. #define    kNewTSMDocument                0        // create new TSM aware document
  281. #define    kDeleteTSMDocument            1        // delete TSM aware document
  282. #define    kActivateTSMDocument            2        // activate TSM aware document
  283. #define    kDeactivateTSMDocument        3        // deactivate TSM aware document
  284. #define    kTSMEvent                        4        // pass all events to TSM
  285. #define    kTSMMenuSelect                    5        // pass menu selection to TSM
  286. #define    kSetTSMCursor                    6        // set the cursor
  287. #define    kFixTSMDocument                7        // terminate text services
  288. #define    kGetServiceList                8        // get all text service components
  289. #define    kOpenTextService                9        // open  the text service
  290. #define    kCloseTextService                10        // close the text service
  291. #define    kSendAEFromTSMComponent        11        // send Apple Event to client
  292.  
  293.  
  294. /* ••    Utilities ... */
  295.  
  296. #define    kSetDefaultInputMethod        12        // 
  297. #define    kGetDefaultInputMethod        13        // 0x0D
  298. #define    kSetTextServiceLanguage        14        // Called by Script Mgr
  299. #define    kGetTextServiceLanguage        15        // 
  300. #define    kUseInputWindow                16        // 
  301. #define    kNewServiceWindow                17        // 
  302. #define    kCloseServiceWindow            18        // 
  303. #define    kGetFrontServiceWindow        19        // 
  304.  
  305.  
  306. #define    kInitTSMAwareApplication    20        // claim TSM aware application
  307. #define    kCloseTSMAwareApplication    21        // application deregisters itself as TSM aware
  308.  
  309. #define    kFindServiceWindow            23
  310.  
  311.  
  312. /*    •• ************************************** ••  */
  313.  
  314.  
  315.  
  316.  
  317. /* High level TSM routines .. */
  318.  
  319. pascal OSErr NewTSMDocument(short numOfInterface,        OSType supportedInterfaceTypes[],
  320.                                      TSMDocumentID *idocID,        long     refcon)
  321. = { 0x303C,kNewTSMDocument, TSMTrapNum };                    /* MOVE.W    #selector,D0        */
  322.  
  323. pascal OSErr DeleteTSMDocument(TSMDocumentID idocID)
  324. = { 0x303C, kDeleteTSMDocument, TSMTrapNum };
  325.  
  326. pascal OSErr ActivateTSMDocument(TSMDocumentID idocID)
  327. = { 0x303C, kActivateTSMDocument, TSMTrapNum };
  328.  
  329. pascal OSErr DeactivateTSMDocument(TSMDocumentID idocID)
  330. = { 0x303C, kDeactivateTSMDocument, TSMTrapNum };
  331.  
  332. pascal Boolean TSMEvent(EventRecord *event)                                     // pass all events to TSM (removed TSMDocumentID #35)
  333. = { 0x303C, kTSMEvent, TSMTrapNum };
  334.  
  335. pascal Boolean TSMMenuSelect(long menuResult)                                 // pass menu selection to TSM (removed TSMDocumentID #35)
  336. = { 0x303C, kTSMMenuSelect, TSMTrapNum };
  337.  
  338. pascal Boolean SetTSMCursor(Point mousePos)                                     // set the cursor (removed TSMDocumentID #35)
  339. = { 0x303C, kSetTSMCursor, TSMTrapNum };
  340.  
  341. pascal OSErr FixTSMDocument(TSMDocumentID idocID)                             // terminate text services
  342. = { 0x303C, kFixTSMDocument, TSMTrapNum };
  343.  
  344. pascal OSErr GetServiceList(short            numOfInterface,
  345.                             OSType                        supportedInterfaceTypes[],
  346.                             TextServiceListHandle    *serviceInfo,
  347.                             long                            *seedValue)                     // get all text services
  348. = { 0x303C, kGetServiceList, TSMTrapNum };
  349.  
  350. pascal OSErr OpenTextService(TSMDocumentID idocID, Component aComponent, ComponentInstance *aComponentInstance) 
  351. = { 0x303C, kOpenTextService, TSMTrapNum };                                    // open the text service (return instance)
  352.  
  353.  
  354. pascal OSErr CloseTextService(TSMDocumentID idocID, ComponentInstance aComponentInstance)
  355. = { 0x303C, kCloseTextService, TSMTrapNum };                                     // close the text service (return instance)
  356.  
  357.  
  358.  
  359. /* Sending callback AppleEvents ... */
  360. pascal OSErr SendAEFromTSMComponent(AppleEvent        *theAppleEvent,    // should be a pointer
  361.                             AppleEvent                *reply, 
  362.                             AESendMode                sendMode,
  363.                             AESendPriority            sendPriority,
  364.                             long                        timeOutInTicks,
  365.                             IdleProcPtr                idleProc,
  366.                             EventFilterProcPtr    filterProc )
  367. = { 0x303C, kSendAEFromTSMComponent, TSMTrapNum };
  368.  
  369. pascal OSErr InitTSMAwareApplication(void)                                         // app registers itself as TSM aware
  370. = { 0x303C, kInitTSMAwareApplication, TSMTrapNum };
  371.  
  372.  
  373. pascal OSErr CloseTSMAwareApplication(void)                                     // app deregisters itself when quit
  374. = { 0x303C, kCloseTSMAwareApplication, TSMTrapNum };
  375.  
  376.  
  377.  
  378.  
  379. /* ••  Utilities ... */
  380. pascal OSErr SetDefaultInputMethod ( Component  ts, ScriptLanguageRecord *slRecordPtr )
  381. = { 0x303C, kSetDefaultInputMethod, TSMTrapNum };
  382.  
  383. pascal OSErr GetDefaultInputMethod ( Component *ts, ScriptLanguageRecord *slRecordPtr )
  384. = { 0x303C, kGetDefaultInputMethod, TSMTrapNum };
  385.  
  386. pascal OSErr SetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr )
  387. = { 0x303C, kSetTextServiceLanguage, TSMTrapNum };
  388.  
  389. pascal OSErr GetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr )
  390. = { 0x303C, kGetTextServiceLanguage, TSMTrapNum };
  391.  
  392. pascal OSErr UseInputWindow( TSMDocumentID idocID, Boolean useWindow )
  393. = { 0x303C, kUseInputWindow, TSMTrapNum };
  394.  
  395. pascal OSErr NewServiceWindow(void            *wStorage,
  396.                                 const Rect            *boundsRect,
  397.                                 ConstStr255Param    title,
  398.                                 Boolean                visible,
  399.                                 short                    theProc,
  400.                                 WindowPtr            behind,
  401.                                 Boolean                goAwayFlag,
  402.                                 ComponentInstance    ts,
  403.                                 WindowPtr            *window )
  404. = { 0x303C, kNewServiceWindow, TSMTrapNum };
  405.  
  406. pascal OSErr CloseServiceWindow(WindowPtr window )
  407. = { 0x303C, kCloseServiceWindow, TSMTrapNum };
  408.  
  409. pascal OSErr GetFrontServiceWindow(WindowPtr *window )
  410. = { 0x303C, kGetFrontServiceWindow, TSMTrapNum };
  411.  
  412. pascal short FindServiceWindow(Point thePoint,WindowPtr *theWindow)
  413. = { 0x303C, kFindServiceWindow, TSMTrapNum };
  414.  
  415.  
  416.  
  417. /* ••    Low level routines which are dispatched directly to the Component Manager ... */
  418.  
  419. #define    kCMGetScriptLangSupport        0x0001        // Component Manager call selector 1
  420. #define    kCMInitiateTextService        0x0002        // Component Manager call selector 2
  421. #define    kCMTerminateTextService        0x0003        // Component Manager call selector 3
  422. #define    kCMActivateTextService        0x0004        // Component Manager call selector 4
  423. #define    kCMDeactivateTextService    0x0005        // Component Manager call selector 5
  424. #define    kCMTextServiceEvent            0x0006        // Component Manager call selector 6
  425. #define    kCMGetTextServiceMenu        0x0007        // Component Manager call selector 7
  426. #define    kCMTextServiceMenuSelect    0x0008        // Component Manager call selector 8
  427. #define    kCMFixTextService                0x0009        // Component Manager call selector 9
  428. #define    kCMSetTextServiceCursor        0x000A        // Component Manager call selector 10
  429. #define    kCMHidePaletteWindows        0x000B        // Component Manager call selector 11            <#37>
  430.  
  431.  
  432. /* ••  Low level TSM routines ... */
  433.  
  434. pascal ComponentResult GetScriptLanguageSupport(ComponentInstance ts, ScriptLanguageSupportHandle *scriptHdl)
  435.  = {0x2F3C,0x04,kCMGetScriptLangSupport,0x7000,0xA82A};            /* selector = 1 */
  436.  
  437.  
  438. pascal ComponentResult InitiateTextService(ComponentInstance ts)
  439.  = {0x2F3C,0x00,kCMInitiateTextService,0x7000,0xA82A};            /* selector = 2 */
  440.  
  441.  
  442. pascal ComponentResult TerminateTextService(ComponentInstance ts)
  443.  = {0x2F3C,0x00,kCMTerminateTextService,0x7000,0xA82A};            /* selector = 3 */
  444.  
  445.  
  446. pascal ComponentResult ActivateTextService(ComponentInstance ts)
  447.  = {0x2F3C,0x00,kCMActivateTextService,0x7000,0xA82A};            /* selector = 4 */
  448.  
  449.  
  450. pascal ComponentResult DeactivateTextService(ComponentInstance ts)
  451.  = {0x2F3C,0x00,kCMDeactivateTextService,0x7000,0xA82A};            /* selector = 5 */
  452.  
  453.  
  454. pascal ComponentResult TextServiceEvent(ComponentInstance ts, short numOfEvents, EventRecord *event)
  455.  = {0x2F3C,0x06,kCMTextServiceEvent,0x7000,0xA82A};                /* selector = 6 */
  456.  
  457.  
  458. pascal ComponentResult GetTextServiceMenu(ComponentInstance ts, MenuHandle *serviceMenu)
  459.  = {0x2F3C,0x4,kCMGetTextServiceMenu,0x7000,0xA82A};                /* selector = 7 */
  460.  
  461.  
  462. pascal ComponentResult TextServiceMenuSelect(ComponentInstance ts, MenuHandle serviceMenu, short item)
  463.  = {0x2F3C,0x06,kCMTextServiceMenuSelect,0x7000,0xA82A};            /* selector = 8 */
  464.  
  465.  
  466. pascal ComponentResult FixTextService(ComponentInstance ts)
  467.  = {0x2F3C,0x00,kCMFixTextService,0x7000,0xA82A};                    /* selector = 9 */
  468.  
  469.  
  470. pascal ComponentResult SetTextServiceCursor(ComponentInstance ts, Point mousePos)
  471.  = {0x2F3C,0x04,kCMSetTextServiceCursor,0x7000,0xA82A};            /* selector = 10 */
  472.  
  473.  
  474. pascal ComponentResult HidePaletteWindows(ComponentInstance ts)
  475.  = {0x2F3C,0x00,kCMHidePaletteWindows,0x7000,0xA82A};                /* selector = 11                    <#37> */
  476.  
  477.  
  478.  
  479. #endif